package com.example.evaluationserver.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.evaluationserver.entity.Evaluation;
import com.example.evaluationserver.manager.EvaluationManager;
import com.example.evaluationserver.params.EvaluationParams;
import com.example.evaluationserver.params.PageEvaluationParams;
import com.example.evaluationserver.vo.EvaluationNumVO;
import com.example.evaluationserver.vo.EvaluationVO;
import com.example.userserver.enums.ReturnEnum;
import com.example.userserver.utils.BeanCopyUtils;
import com.example.userserver.vo.Result;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;


@Service
public class EvaluationService {
    @Autowired
    private EvaluationManager evaluationManager;
    public PageInfo<EvaluationVO> pageEvaluation(PageEvaluationParams pageEvaluationParams){
        PageInfo<EvaluationVO> pageInfo = PageHelper.startPage(pageEvaluationParams)
                .doSelectPageInfo(() ->  evaluationManager.listEvaluation(pageEvaluationParams));
        return pageInfo;
    }

    public void deleteEvaluation(String id) {
        evaluationManager.deleteEvaluation(id);
    }

    public Result updateEvaluation(EvaluationParams evaluationParams) {
        Evaluation evaluation = new Evaluation();
        BeanCopyUtils.copyPropertiesIgnoreNull(evaluationParams, evaluation);
        evaluationManager.updateEvaluation(evaluation);
        return new Result(null, ReturnEnum.SUCCESS);
    }

    public Result insertEvaluation(EvaluationParams evaluationParams) {
        Evaluation evaluation = new Evaluation();
        BeanCopyUtils.copyPropertiesIgnoreNull(evaluationParams, evaluation);
        evaluationManager.insertEvaluation(evaluation);
        return new Result(null, ReturnEnum.SUCCESS);
    }

    public EvaluationNumVO getEvaluationNum(String userId) {
        EvaluationNumVO evaluationNumVO = new EvaluationNumVO();
        if( ! StringUtils.isEmpty(userId)){
            // 计算各等级评价数量
            QueryWrapper queryWrapperGreat = new QueryWrapper();
            queryWrapperGreat.eq("get_id", userId);
            queryWrapperGreat.eq("rating", 1);
            evaluationNumVO.setGreat(evaluationManager.getEvaluationNum(queryWrapperGreat));
            QueryWrapper queryWrapperMid = new QueryWrapper();
            queryWrapperMid.eq("get_id", userId);
            queryWrapperMid.eq("rating", 2);
            evaluationNumVO.setMid(evaluationManager.getEvaluationNum(queryWrapperMid));
            QueryWrapper queryWrapperBad = new QueryWrapper();
            queryWrapperBad.eq("get_id", userId);
            queryWrapperBad.eq("rating", 3);
            evaluationNumVO.setBad(evaluationManager.getEvaluationNum(queryWrapperBad));
        }
        return evaluationNumVO;
    }

    public Object pageEvaluationPost(PageEvaluationParams pageEvaluationParams) {
        PageInfo<EvaluationVO> pageInfo = PageHelper.startPage(pageEvaluationParams)
                .doSelectPageInfo(() ->  evaluationManager.listEvaluationPost(pageEvaluationParams));
        return pageInfo;
    }

    public Object getEvaluationNumPost(String userId) {
        EvaluationNumVO evaluationNumVO = new EvaluationNumVO();
        if( ! StringUtils.isEmpty(userId)){
            // 计算各等级评价数量
            QueryWrapper queryWrapperGreat = new QueryWrapper();
            queryWrapperGreat.eq("post_id", userId);
            queryWrapperGreat.eq("rating", 1);
            evaluationNumVO.setGreat(evaluationManager.getEvaluationNum(queryWrapperGreat));
            QueryWrapper queryWrapperMid = new QueryWrapper();
            queryWrapperMid.eq("post_id", userId);
            queryWrapperMid.eq("rating", 2);
            evaluationNumVO.setMid(evaluationManager.getEvaluationNum(queryWrapperMid));
            QueryWrapper queryWrapperBad = new QueryWrapper();
            queryWrapperBad.eq("post_id", userId);
            queryWrapperBad.eq("rating", 3);
            evaluationNumVO.setBad(evaluationManager.getEvaluationNum(queryWrapperBad));
        }
        return evaluationNumVO;
    }
}
